import logging
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List

from . import crud, schemas
from .dependencies import get_db

router = APIRouter(
    prefix="/todos",
    tags=["Todos"],
)

@router.get("/{todo_id}", response_model=schemas.Todo)
def read_todo(todo_id: int, db: Session = Depends(get_db)):
    """
    根据ID获取单个待办事项。
    """
    db_todo = crud.get_todo(db, todo_id=todo_id)
    if db_todo is None:
        raise HTTPException(status_code=404, detail="待办事项未找到")
    return db_todo


@router.post("/", response_model=schemas.Todo, status_code=201)
def create_todo(todo: schemas.TodoBase, db: Session = Depends(get_db)):
    """
    创建一个新的待办事项。
    """
    logging.info(f"正在创建待办事项: {todo.title}")
    return crud.create_todo(db=db, todo=todo)


@router.put("/{todo_id}", response_model=schemas.Todo)
def update_todo(todo_id: int, todo_update: schemas.TodoUpdate, db: Session = Depends(get_db)):
    """
    更新一个待办事项。可以只更新部分字段。
    """
    logging.info("test")
    db_todo = crud.update_todo(db, todo_id=todo_id, todo_update=todo_update)
    if db_todo is None:
        raise HTTPException(status_code=404, detail="待办事项未找到")
    logging.info(f"待办事项 {todo_id} 已更新")
    return db_todo

@router.delete("/{todo_id}", status_code=204)
def delete_todo(todo_id: int, db: Session = Depends(get_db)):
    """
    删除一个待办事项。
    """
    db_todo = crud.delete_todo(db, todo_id=todo_id)
    if db_todo is None:
        raise HTTPException(status_code=404, detail="待办事项未找到")
    logging.info(f"待办事项 {todo_id} 已删除")
    # 对于 DELETE 操作，通常返回 204 No Content，表示成功但没有响应体
    return

